<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:nyext="urn:noury-extensions" >
  <xsl:output method="text" encoding="UTF-8"/>

  <xsl:param name="package" />
  <xsl:param name="outdir" />
  <xsl:param name="name" />
  <xsl:param name="domainName" />
  <xsl:variable name="domain" select="/manifest/types/domain[@name=$domainName]" />
  <xsl:variable name="domainProps" select="$domain/interface/property[@type=/manifest/types/domain/@name]" />
  <xsl:variable name="properties" select="$domain/interface/property[not(@type=/manifest/types/domain/@name) and accessor/@getter='public']" />

  <xsl:include href="functions.xslt" />

<!--Template pour récupérer le type du controle-->
  <xsl:template match="property" mode="get-type">
    <xsl:choose>
      <xsl:when test="@type='bool'">
        <xsl:text>ICheckBoxControl</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>ITextControl</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

<!--Template pour récupérer le nom complet du controle-->
  <xsl:template match="property" mode="get-name">
    <xsl:value-of select="@name" />
    <xsl:text>Editor</xsl:text>
<!--
    <xsl:choose>
      <xsl:when test="$property_type='bool'">
        <xsl:text>ComboBox</xsl:text>
      </xsl:when>
      <xsl:when test="$enum_type">
        <xsl:text>DropDownList</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='System.DateTime'">
        <xsl:text>Tbx</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='System.Uri'">
        <xsl:text>Tbx</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='string'">
        <xsl:text>Tbx</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='float'">
        <xsl:text>Tbx</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='int'">
        <xsl:text>Tbx</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='long'">
        <xsl:text>Tbx</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>TextBox</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
-->
  </xsl:template>

<!--Template pour récupérer le label du controle-->
  <xsl:template match="property" mode="get-label">
    <xsl:value-of select="@name" />
    <xsl:text>Label</xsl:text>
  </xsl:template>

<!--Template pour récupérer le ControlValidator du controle-->
  <xsl:template match="property" mode="get-validator">
    <xsl:value-of select="@name" />
    <xsl:text>Validator</xsl:text>
  </xsl:template>

<!--Template pour déclarer les variables des controles-->
<xsl:template match="property" mode="declare">
  <xsl:text>
        /// &lt;summary /&gt;
        private Label _</xsl:text>
  <xsl:apply-templates select="." mode="get-label" />
  <xsl:text>;
        /// &lt;summary /&gt;
        private </xsl:text>
  <xsl:apply-templates select="." mode="get-type" />
  <xsl:text> _</xsl:text>
  <xsl:apply-templates select="." mode="get-name" />
  <xsl:text>;</xsl:text>
  <xsl:if test="@type!='bool' and accessor/@setter='public'">
    <xsl:text>
        /// &lt;summary /&gt;
        private CustomValidator _</xsl:text>
    <xsl:apply-templates select="." mode="get-validator" />
    <xsl:text>;</xsl:text>
  </xsl:if>
</xsl:template>

<!--Template pour initialiser les variables des controles-->
<xsl:template match="property" mode="initialize">
  <xsl:variable name="type" select="@type"/>
  <xsl:variable name="enum" select="/manifest/types/enum[@name=$type]" />
  <xsl:variable name="control">
    <xsl:choose>
      <xsl:when test="@type='bool'">
        <xsl:text>CheckBox</xsl:text>
      </xsl:when>
      <xsl:when test="$enum">
        <xsl:text>DropDownList</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>TextBox</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
  <xsl:text>
            _</xsl:text>
  <xsl:apply-templates select="." mode="get-label" />
  <xsl:text>=new Label();
            _</xsl:text>
  <xsl:apply-templates select="." mode="get-label" />
  <xsl:text>.Text = Resources.SR.</xsl:text>
  <xsl:value-of select="$domainName" />
  <xsl:text>Control</xsl:text>
  <xsl:value-of select="@name" />
  <xsl:text>Label;</xsl:text>
  <xsl:choose>
    <xsl:when test="@type!='bool' and accessor/@setter!='public'">
      <xsl:text>
            _</xsl:text>
      <xsl:apply-templates select="." mode="get-name" />
      <xsl:text>=new Label();</xsl:text>
    </xsl:when>
    <xsl:otherwise>
      <xsl:text>
            if (ReadOnly)
            {
                _</xsl:text>
      <xsl:apply-templates select="." mode="get-name" />
      <xsl:text>=new </xsl:text>
      <xsl:choose>
        <xsl:when test="@type='bool'">
          <xsl:value-of select="$control" />
          <xsl:text>();
                ((WebControl)_</xsl:text>
          <xsl:apply-templates select="." mode="get-name" />
          <xsl:text>).Enabled = false;</xsl:text>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>Label();</xsl:text>
        </xsl:otherwise>
      </xsl:choose>
      <xsl:text>
            } else
            {
                _</xsl:text>
      <xsl:apply-templates select="." mode="get-name" />
      <xsl:text>=new </xsl:text>
      <xsl:value-of select="$control" />
      <xsl:text>();</xsl:text>
      <xsl:if test="not($enum) and @size&gt;0">
        <xsl:text>
                ((TextBox)_</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>).MaxLength=</xsl:text>
        <xsl:value-of select="@size" />
        <xsl:text>;
                ((TextBox)_</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>).Columns=</xsl:text>
        <xsl:value-of select="@size" />
        <xsl:text>;</xsl:text>
      </xsl:if>
      <xsl:if test="$enum">
        <xsl:text>
                Enums.DropDownListBind((DropDownList)_</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>, typeof(DomainModel.</xsl:text>
        <xsl:value-of select="$type" />
        <xsl:text>));</xsl:text>
        <xsl:if test="@nullable='true'">
          <xsl:text>
                ((DropDownList)_</xsl:text>
          <xsl:apply-templates select="." mode="get-name" />
          <xsl:text>).Items.Add(new ListItem(string.Empty, string.Empty));</xsl:text>
        </xsl:if>
      </xsl:if>
<xsl:text>
            }</xsl:text>
    </xsl:otherwise>
  </xsl:choose>
  <xsl:text>
            ((Control)_</xsl:text>
  <xsl:apply-templates select="." mode="get-name" />
  <xsl:text>).ID="</xsl:text>
  <xsl:apply-templates select="." mode="get-name" />
  <xsl:text>";</xsl:text>
  <xsl:if test="@type!='bool'">
    <xsl:if test="accessor/@setter='public'">
      <xsl:text>
            if (!ReadOnly)
            {
                ((</xsl:text>
      <xsl:value-of select="$control" />
      <xsl:text>)_</xsl:text>
      <xsl:apply-templates select="." mode="get-name" />
      <xsl:text>).CausesValidation=true;
                _</xsl:text>
      <xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>=new CustomValidator();
                _</xsl:text>
      <xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>.ControlToValidate=((Control)_</xsl:text>
      <xsl:apply-templates select="." mode="get-name" />
      <xsl:text>).ID;
                _</xsl:text>
      <xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>.ValidateEmptyText=true;
                _</xsl:text>
      <xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>.ServerValidate+=</xsl:text>
      <xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>_ServerValidate;
            }</xsl:text>
    </xsl:if>
  </xsl:if>
</xsl:template>

  <!--Template pour organiser les controles-->
  <xsl:template match="property" mode="organize">
    <xsl:text>

            TableCell cell</xsl:text>
    <xsl:apply-templates select="." mode="get-label" />
    <xsl:text> = new TableCell();
            </xsl:text>
    <xsl:text>TableCell cell</xsl:text>
    <xsl:apply-templates select="." mode="get-name" />
    <xsl:text> = new TableCell();
            cell</xsl:text>
    <xsl:apply-templates select="." mode="get-label" />
    <xsl:text>.Controls.Add(_</xsl:text>
    <xsl:apply-templates select="." mode="get-label" />
    <xsl:text>);
            </xsl:text>
    <xsl:text>cell</xsl:text>
    <xsl:apply-templates select="." mode="get-name" />
    <xsl:text>.Controls.Add((Control)_</xsl:text>
    <xsl:apply-templates select="." mode="get-name" />
    <xsl:text>);
            </xsl:text>
    <xsl:if test="@type!='bool' and accessor/@setter='public'">
      <xsl:text>if (!ReadOnly) cell</xsl:text>
      <xsl:apply-templates select="." mode="get-name" />
      <xsl:text>.Controls.Add(_</xsl:text>
      <xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>);
            </xsl:text>
    </xsl:if>
    <xsl:text>TableRow row</xsl:text>
    <xsl:value-of select="@name" />
    <xsl:text> = new TableRow();
            </xsl:text>
    <xsl:text>row</xsl:text>
    <xsl:value-of select="@name" />
    <xsl:text>.Cells.AddRange(new TableCell[] { cell</xsl:text>
    <xsl:apply-templates select="." mode="get-label" />
    <xsl:text>, cell</xsl:text>
    <xsl:apply-templates select="." mode="get-name" />
    <xsl:text> });</xsl:text>
  </xsl:template>

  <!--Template permettant de créer la table-->
  <xsl:template name="create-table">
    <xsl:text>

            Table tableActionInfos = new Table();</xsl:text>
    <xsl:for-each select="$properties">
      <xsl:text>
            tableActionInfos.Rows.Add(row</xsl:text>
      <xsl:value-of select="@name" />
      <xsl:text>);</xsl:text>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="property" mode="get-string">
    <xsl:variable name="type" select="@type"/>
    <xsl:variable name="enum" select="/manifest/types/enum[@name=$type]" />
    <xsl:choose>
      <xsl:when test="$enum"> 
        <xsl:text>TypeDescriptor.GetConverter(typeof(DomainModel.</xsl:text>
        <xsl:value-of select="@type" />
        <xsl:text>)).ConvertToInvariantString(</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>)</xsl:text>
      </xsl:when>
      <xsl:when test="@type='string'">
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>.ToString()</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="property" mode="get-value">
    <xsl:variable name="type" select="@type"/>
    <xsl:variable name="enum" select="/manifest/types/enum[@name=$type]" />
    <xsl:choose>
      <xsl:when test="$enum"> 
        <xsl:text>(DomainModel.</xsl:text>
        <xsl:value-of select="@type" />
        <xsl:text>)TypeDescriptor.GetConverter(typeof(DomainModel.</xsl:text>
        <xsl:value-of select="@type" />
        <xsl:text>)).ConvertFromInvariantString(_</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text)</xsl:text>
      </xsl:when>
      <xsl:when test="@type='string'">
        <xsl:text>_</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="@type" />
        <xsl:text>.Parse(_</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text)</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!--Template pour remplir les champs du controle-->
  <xsl:template match="property" mode="fill-control">
    <xsl:variable name="type" select="@type"/>
    <xsl:variable name="enum" select="/manifest/types/enum[@name=$type]" />
    <xsl:variable name="vt" select="$enum or $type='byte' or $type='short' or $type='int' or $type='long' or type='float' or type='double' or $type='System.DateTime'" />
    <xsl:choose>
      <xsl:when test="$enum or @required='true' or ($vt and not(@nullable))">
        <xsl:text>
            _</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text=</xsl:text>
        <xsl:apply-templates select="." mode="get-string" />
        <xsl:text>;</xsl:text>
      </xsl:when>
      <xsl:when test="@type='bool'">
        <xsl:text>
            _</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Checked=</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>;</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>
            _</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text=</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>!=null ? </xsl:text>
        <xsl:apply-templates select="." mode="get-string" />
        <xsl:text> : string.Empty;</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
<!--      <xsl:when test="$property_type='System.DateTime'">
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text = _</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>.ToString();
</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='System.Uri'">
        <xsl:text>if (_</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text> != null)
                </xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text = _</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>.ToString();
</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='string'">
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text = _</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text> ?? string.Empty;
</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='float'or $property_type='int' or $property_type='long'">
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text = Convert.ToString(_</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>);
</xsl:text>
      </xsl:when>
      <xsl:when test="$property_type='bool'">
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Checked = _</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>;
</xsl:text>
      </xsl:when>
      <xsl:when test="$enum_type">
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.SelectedValue = _</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>.ToString();
</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Text = _</xsl:text>
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text> ?? string.Empty;
</xsl:text>
      </xsl:otherwise>
    </xsl:choose> -->
  </xsl:template>

  <!--Template permettant de créer la page onload-->
  <xsl:template match="property" mode="page-onload">
    <xsl:text>                </xsl:text>
    <xsl:variable name="property_type" select="@type"/>
    <xsl:choose>
      <xsl:when test="$property_type='bool'">
        <xsl:value-of select="$domainName" />
        <xsl:text>.</xsl:text>
        <xsl:value-of select="@name" />
        <xsl:text>=_</xsl:text>
        <xsl:apply-templates select="." mode="get-name" />
        <xsl:text>.Checked;
</xsl:text>
      </xsl:when>
      <xsl:otherwise>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="property" mode="server-validate">
    <xsl:variable name="type" select="@type"/>
    <xsl:variable name="enum" select="/manifest/types/enum[@name=$type]" />
    <xsl:variable name="vt" select="$enum or $type='byte' or $type='short' or $type='int' or $type='long' or type='float' or type='double' or $type='System.DateTime'" />
    <xsl:if test="@type!='bool' and accessor/@setter='public'">
      <xsl:text>

        /// &lt;summary&gt;Validates the updated value of the &lt;see cref="DomainModel.</xsl:text>
          <xsl:value-of select="$domainName" />
          <xsl:text>.</xsl:text>
          <xsl:value-of select="@name" />
          <xsl:text>" /&gt; property.&lt;/summary&gt;
        [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
        private void </xsl:text>
      <xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>_ServerValidate(object source, ServerValidateEventArgs args)
        {
            try
            {</xsl:text>
      <xsl:choose>
        <xsl:when test="$enum or @required='true' or ($vt and not(@nullable))">
          <xsl:text>
                </xsl:text>
          <xsl:value-of select="$domainName" />
          <xsl:text>.</xsl:text>
          <xsl:value-of select="@name" />
          <xsl:text>=</xsl:text>
          <xsl:apply-templates select="." mode="get-value" />
          <xsl:text>;</xsl:text>
        </xsl:when>
        <xsl:otherwise>
          <xsl:text>
                if (string.IsNullOrEmpty(_</xsl:text>
          <xsl:apply-templates select="." mode="get-name" />
          <xsl:text>.Text))
                    </xsl:text>
          <xsl:value-of select="$domainName" />
          <xsl:text>.</xsl:text>
          <xsl:value-of select="@name" />
          <xsl:text>=null;
                else
                    </xsl:text>
          <xsl:value-of select="$domainName" />
          <xsl:text>.</xsl:text>
          <xsl:value-of select="@name" />
          <xsl:text>=</xsl:text>
          <xsl:apply-templates select="." mode="get-value" />
          <xsl:text>;</xsl:text>
        </xsl:otherwise>
      </xsl:choose>
      <xsl:text>
                args.IsValid=</xsl:text>
      <xsl:value-of select="$domainName" />
      <xsl:text>.Validate("</xsl:text>
      <xsl:value-of select="@name" />
      <xsl:text>");
            if (!args.IsValid)
                </xsl:text>
            _<xsl:apply-templates select="." mode="get-validator" />
            <xsl:text>.Text=((IDataErrorInfo)_</xsl:text>
            <xsl:value-of select="$domainName" />
            <xsl:text>)["</xsl:text>
            <xsl:value-of select="@name" />
            <xsl:text>"];
            } catch(Exception ex)
            {
                args.IsValid=false;
                </xsl:text>
      _<xsl:apply-templates select="." mode="get-validator" />
      <xsl:text>.Text=ex.Message;
            }
        }</xsl:text>
    </xsl:if>
  </xsl:template>

  <!--Template permettant de générer le fichier-->
  <xsl:template name="generate-model-file">
    <xsl:variable name="src">
    <xsl:text>// $Id$
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using System.Text.RegularExpressions;

namespace </xsl:text>
    <xsl:value-of select="$package" />
    <xsl:text>
{

    partial class </xsl:text>
    <xsl:value-of select="$name" />
    <xsl:text>
    {

        /// &lt;summary&gt;Called by the ASP.NET page framework to notify server controls that use
        /// composition-based implementation to create any child controls they contain
        /// in preparation for posting back or rendering.&lt;/summary&gt;
        private void _CreateChildControls()
        {
            Controls.Clear();
</xsl:text>
    <xsl:apply-templates select="$properties" mode="initialize"/>
    <xsl:apply-templates select="$properties" mode="organize"/>
    <xsl:call-template name="create-table"/>
    <xsl:text>

            Controls.Add(tableActionInfos);
        }</xsl:text>
    <xsl:if test="$properties[@type='bool']">
      <xsl:text>
        /// &lt;summary&gt;Raises the &lt;see cref="Control.Load" /&gt; event.&lt;/summary&gt;
        private void _OnLoad(EventArgs e)
        {
            if (Page.IsPostBack &amp;&amp; !ReadOnly &amp;&amp; (</xsl:text>
      <xsl:value-of select="$domainName" />
      <xsl:text>!= null))
            {
</xsl:text>
      <xsl:apply-templates select="$properties" mode="page-onload"/>
      <xsl:text>            }
        }</xsl:text>
    </xsl:if>
    <xsl:text>

        /// &lt;summary&gt;Raises the &lt;see cref="Control.PreRender" /&gt; event.&lt;/summary&gt;
        private void _OnPreRender(EventArgs e)
        {
            if (</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>!=null)
            {
</xsl:text>
    <xsl:apply-templates select="$properties" mode="fill-control"/>
    <xsl:text>            }
        }</xsl:text>
    <xsl:apply-templates select="$properties" mode="server-validate"/>
    <xsl:text>

        /// &lt;summary&gt;Gets or sets the &lt;see cref="DomainModel.</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>" /&gt; instance being edited by this control.&lt;/summary&gt;
        [Browsable(false)]
        public DomainModel.</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text> </xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>
        {
            get {
                return _</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>;
            }
            set
            {
                EnsureChildControls();
                _</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text> = value;
            }
        }

        /// &lt;summary&gt;Gets or sets a value indicating whether the contents of the &lt;see cref="</xsl:text>
    <xsl:value-of select="$name" />
    <xsl:text>" /&gt; control can be changed.&lt;/summary&gt;
        [Bindable(true)]
        [DefaultValue(false)]
        public bool ReadOnly
        {
            get
            {
                object o=ViewState["ReadOnly"];
                if (o!=null)
                    return (bool)o;

                return false;
            }
            set
            {
                ViewState["ReadOnly"]=value;
            }
        }
</xsl:text>
    <xsl:apply-templates select="$properties" mode="declare"/>
    <xsl:text>
        /// &lt;summary /&gt;
        private DomainModel.</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text> _</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>;

    }
}
</xsl:text>
  </xsl:variable>
  <xsl:value-of select="nyext:generateFile($src, nyext:combinePath($outdir, concat(nyext:getModelFileName($name), '.cs')))" />
</xsl:template>



<xsl:template name="generate-user-file">
  <xsl:text>// $Id$
/*! \file
 * \brief </xsl:text>
  <xsl:value-of select="$name" />
  <xsl:text> web control definition.
 *
 * \author $Author$
 * \date $Date$
 * \version $Revision$
 */

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Security.Permissions;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using System.Text.RegularExpressions;

namespace </xsl:text>
    <xsl:value-of select="$package" />
    <xsl:text>
{



    ///////////////////////////////////////////////////////////////////////////
    ///
    /// &lt;summary&gt;Control used to edit or visualize a &lt;see cref="DomainModel.</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>" /&gt; instance.&lt;/summary&gt;
    ///
    ///////////////////////////////////////////////////////////////////////////

    [ToolboxData("&lt;{0}:</xsl:text>
    <xsl:value-of select="$name" />
    <xsl:text> runat=\"server\" /&gt;")]
    [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
    [AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
    [DefaultProperty("ReadOnly")]
    [ValidationProperty("</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>")]
    public partial class </xsl:text>
    <xsl:value-of select="$name" />
    <xsl:text>:
        CompositeControl,
        DomainModel.I</xsl:text>
    <xsl:value-of select="$domainName" />
    <xsl:text>Container
    {

        /// &lt;summary&gt;Called by the ASP.NET page framework to notify server controls that use
        /// composition-based implementation to create any child controls they contain
        /// in preparation for posting back or rendering.&lt;/summary&gt;
        protected override void CreateChildControls()
        {
            _CreateChildControls();

            base.CreateChildControls();
        }</xsl:text>
    <xsl:if test="$properties[@type='bool']">
      <xsl:text>

        /// &lt;summary&gt;Raises the &lt;see cref="Control.Load" /&gt; event.&lt;/summary&gt;
        protected override void OnLoad(EventArgs e)
        {
            _OnLoad(e);

            base.OnLoad(e);
        }</xsl:text>
    </xsl:if>
    <xsl:text>

        /// &lt;summary&gt;Raises the &lt;see cref="Control.PreRender" /&gt; event.&lt;/summary&gt;
        protected override void OnPreRender(EventArgs e)
        {
            _OnPreRender(e);

            base.OnPreRender(e);
        }

    }
}
</xsl:text>
</xsl:template>

  <!--Point d'entrée-->
  <xsl:template match="/">
    <xsl:call-template name="generate-model-file" />
    <xsl:call-template name="generate-user-file" />
  </xsl:template>

</xsl:stylesheet>
